/**
 * azezret.
 */
package fr.afcepf.qualimetrie;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

/**
 * @author stagiaire
 */
public class DataBlagueImpl implements IDataBlague {
    /**
     * Requete d'ajout.
     */
    private final String reqAjout =
        "INSERT INTO blague (auteur,titre,contenu,datecreation) "
            + "VALUES (?,?,?,?)";
    /**
     * Indice du parametre auteur dans la requete ajout.
     */
    private final int indiceAuteur = 1;
    /**
     * Indice du parametre titre dans la requete ajout.
     */
    private final int indiceTitre = 2;
    /**
     * Indice du parametre contenu dans la requete ajout.
     */
    private final int indiceContenu = 3;
    /**
     * Indice du parametre datecreation dans la requete ajout.
     */
    private final int indiceDateCreationInsert = 4;
    @Override
    public int ajouter(Blague paramBlague) {
        Connection cnx = UtilConnexionAtod18.getConnexion();
        int cle = 0;
        try {
            PreparedStatement pstmt =
                    cnx.prepareStatement(reqAjout,
                            Statement.RETURN_GENERATED_KEYS);
            pstmt.setString(indiceAuteur, paramBlague.getAuteur());
            pstmt.setString(indiceTitre, paramBlague.getTitre());
            pstmt.setString(indiceContenu, paramBlague.getContenu());
            java.sql.Date dateCreationSql =
                new java.sql.Date(paramBlague.getDateCreation().getTime());
            pstmt.setDate(indiceDateCreationInsert, dateCreationSql);
            int retour = pstmt.executeUpdate();
            if (retour == 1) {
                ResultSet rsKey = pstmt.getGeneratedKeys();
                if (rsKey.next()) {
                    cle = rsKey.getInt(1);
                }
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            try {
                cnx.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        return cle;
    }
    /**
     * Requete de suppression.
     */
    private final String reqSup =
            "DELETE FROM blague WHERE id=?";
    @Override
    public boolean supprimer(Blague paramBlague) {
        Connection cnx = UtilConnexionAtod18.getConnexion();
        boolean retour = false;
        try {
            PreparedStatement pstmt = cnx.prepareStatement(reqSup);
            pstmt.setInt(1, paramBlague.getId());
            retour = pstmt.executeUpdate() == 1;
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            try {
                cnx.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        return retour;
    }
    /**
     * Requete de recherche.
     */
    private final String reqRech =
            "SELECT * FROM blague WHERE auteur like ? OR "
            + "titre like ? OR contenu like ?";
    @Override
    public List<Blague> rechercher(String paramPleinText) {
        Connection cnx = UtilConnexionAtod18.getConnexion();
        List<Blague> retour = new ArrayList<>();
        try {
            PreparedStatement pstmt = cnx.prepareStatement(reqRech);
            pstmt.setString(indiceTitre, "%" + paramPleinText + "%");
            pstmt.setString(indiceContenu, "%" + paramPleinText + "%");
            pstmt.setString(indiceAuteur, "%" + paramPleinText + "%");
            ResultSet rs = pstmt.executeQuery();
            while (rs.next()) {
                Blague uneBlague = new Blague();
                uneBlague.setId(rs.getInt("id"));
                uneBlague.setTitre(rs.getString("titre"));
                uneBlague.setContenu(rs.getString("contenu"));
                uneBlague.setAuteur(rs.getString("auteur"));
                uneBlague.setDateCreation(rs.getDate("datecreation"));
                retour.add(uneBlague);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return retour;
    }

}
